package com.probiz.estore.product.dao;

import java.math.BigDecimal;
import java.util.List;

import com.probiz.estore.common.model.product.ProductReview;
import com.probiz.estore.core.dao.GenericDao;
import com.probiz.estore.core.search.SearchCriteria;
import com.probiz.estore.product.model.ProductReviewSearchCriteria;
/**
 * Dao interface for ProductReview.
 */
public interface ProductReviewDao extends GenericDao<ProductReview> {
	
	/**
	 * 获得全部好中差评的个数(可见)
	 * @param productId
	 * @return [0]全部 [1]好评 [2]中评 [3]差评
	 */
	public Integer[] getCountsByScoreLevelAndProductId(Integer productId);
	/**
	 * 获得一二三四五个星的个数(可见)
	 * @param productId
	 * @return 
	 */
	public Integer[] getCountsByScoreSpanAndProductId(Integer productId);
	
	/**
	 * 获得“我要评论”，“我发表的评论”，“我回复的评论”，“我认为有用的评论 ”的个数
	 * @param customerId
	 * @return 
	 */
	public Integer[] getCountsOfCustomer(Integer customerId);
	/**
	 * 获得搜索criteria
	 * @param productReviewSearchCriteria
	 * @param searchCriteria
	 * @return
	 */
	public SearchCriteria getSearchCriteria(ProductReviewSearchCriteria productReviewSearchCriteria, SearchCriteria searchCriteria);
	
	/**
	 * 搜索评论
	 * @param productReviewSearchCriteria
	 * @param searchCriteria
	 * @return
	 */
	public List<ProductReview> searchByCriteria(ProductReviewSearchCriteria productReviewSearchCriteria, SearchCriteria searchCriteria);
	
	/**
	 * 获得评论的回复个数
	 * @param productReviewId
	 * @return
	 */
	public Long getReplyCountByProductReviewId(Integer productReviewId);
	/**
	 * 获得评论可见的回复个数
	 * @param productReviewId
	 * @return
	 */
	public Long getOnShowReplyCountByProductReviewId(Integer productReviewId);
	/**
	 * 获得商品的评论个数
	 * @param productId
	 * @return
	 */
	public Long getReviewCountByProductId(Integer productId);
	/**
	 * 获得商品的可见评论个数
	 * @param productId
	 * @return
	 */
	public Long getOnShowReviewCountByProductId(Integer productId);
	/**
	 * 根据商品id获得评论的平均分
	 * @param productId
	 * @return
	 */
	public BigDecimal getReviewScoreByProductId(Integer productId);
	/**
	 * 获得评论的所有可见回复
	 * @param productReviewId
	 * @return
	 */
	public List<ProductReview> getOnShowReplyListByReviewId(Integer productReviewId);
	/**
	 * 获得平台总评论数
	 * @return
	 */
	public Long countProductReviewTotal();
	/**
	 * 根据商品id和数量获得最先评论的客户id
	 * @param productId
	 * @param size
	 * @return
	 */
	public List<Integer> getPreviousCustomerIdListByProductIdBySize(Integer productId,Integer size);
	
}